package cn.gzsxt.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Base64.Encoder;

/**
 * 问题1:消息摘要后，返回的密文是乱码的。不好存储
 * 答：我们可以使用Base64编码将任何的字节码转成ASCII码
 * 
 * 问题2：只有使用同一个JDK摘要出来的结果是一样的。那么我们可以在其他电脑通过对撞的方式，暴力破解！
 * 答：通过密码加盐，提高破解的难度
 * @author ranger
 *
 */
public class Md5Utils {
	public static void main(String[] args) {
		System.out.println(md5("123456"));
	}
	
	//1.需要将明文md5加密
	public static String md5(String source){
		//声明一个盐
		String salt="qwer23r4afsefstewtQERZND24&!";
		source=salt+source;
		
		try {
			//第一步：获得一个MD5算法对象
			MessageDigest messageDigest = MessageDigest.getInstance("MD5");
			//第二步：实现摘要
			byte[] result = messageDigest.digest(source.getBytes());
			//第三步：将摘要后的密文转换成字符串
			Encoder encoder = Base64.getEncoder();
			//第四步：将密码转成ASCII码
			String target = encoder.encodeToString(result);
			//String target=new String(result);
			return target;
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	


}
